/** @file dip.h 
 * Digital Image Processing Funktionen
 * 
 * @author Daniel Kummer, Sebastian Kummer
 * @date Donnerstag, Dezember 12, 2007
 * @version 1.0
 */

#ifndef DIP_H_
#define DIP_H_

#include "lcv-config.h"
#include "lcv-structs.h"

/**
 * Fertigt eine Kopie eines Bildes an, inklusive aller Parameter
 * @param pic Bild
 * @return Kopiertes Bild
 */
lcv_picture lcv_clone_picture(const lcv_picture* pic);

/*
 * Löscht den Datenbereich einer Bildstruktur (Ruft free() auf)
 * @param pic Zu löschendes Bild
 */
void lcv_free_picture(lcv_picture* pic);

/**
 * Invertiert Bild
 * @param pic Zu invertierendes Bild
 * @return Invertiertes Bild
 */
lcv_picture lcv_invert(const lcv_picture* pic);

/**
 * Spiegelt Bild. Aus bottom-up wird top-down
 * @param pic Zu spiegelndes Bild
 * @return Gespiegeltes Bild
 */
lcv_picture lcv_reverse(const lcv_picture* pic);

/**
 * Berechnet den Durchschnittswert eines Bildes
 * @param pic Bild
 * @return Durchschnittswert
 */
unsigned int lcv_avg_value(const lcv_picture* pic);

/**
 * Wandelt ein 24Bit BGR Bild in ein 8Bit Graustufenbild um.
 * Dieses Format wird nur intern verwendet, beim Abspeichern werden
 * die Grausufeninformationen auf 24Bit abgebildet.
 * @param pic Umzuwandelndes Bild
 * @return Graustufenbild 
 */
lcv_picture lcv_rgb2gray(const lcv_picture* pic);

/**
 * Wandelt ein 8Bit Graustufenbild in ein 24Bit BGR Bild um.
 * @param pic Umzuwandelndes Bild
 * @return BGR Bild 
 */
lcv_picture lcv_gray2rgb(const lcv_picture* pic);

#endif /*DIP_H_*/
